package com.boot.design.abstractfacroty;

/**
 *  工厂模式和抽象工厂模式不是很好区分
 *  1.工厂模式思路
 *    一个抽象类产品类，可以派生出多个具体产品类。
 *    一个抽象工厂类，可以派生出多个具体工厂类。
 *    每个具体工厂类只可以创建一个产品的实例。
 *  2.抽象工厂模式
 *    多个抽象产品类，每个抽象产品类可以派生出多个具体产品类。
 *    一个抽象工厂类，可以派生出多个具体工厂类。
 *    每个具体工厂类可以创建多个具体产品类的实例，也就是创建的是一个产品线下的多个产品。
 *      区别：
 *    工厂方法模式只有一个抽象类产品，而抽象工厂模式有多个
 *   工厂方法模式的具体工厂类只能创建一个具体产品类的实例，而抽象工厂模式却可以创建多个。
 *
 *    工厂方法创建 "一种" 产品，他的着重点在于"怎么创建"，也就是说如果你开发，你的大量代码很可能围
 *  绕着这种产品的构造，初始化这些细节上面。也因为如此，类似的产品之间有很多可以复用的特征，所以会
 *  和模版方法相随。
 *    抽象工厂需要创建一些列产品，着重点在于"创建哪些"产品上，也就是说，如果你开发，
 *  你的主要任务是划分不同差异的产品线，并且尽量保持每条产品线接口一致，从而可以从同一个抽象工厂继承。
 *  对于java来说，你能见到的大部分抽象工厂模式都是这样的：
 *    ---它的里面是一堆工厂方法，每个工厂方法
 *  返回某种类型的对象。
 **/
public interface Shape {
   void draw();
}